package com.bw.lib_common.coroutine

import android.util.Log
import kotlinx.coroutines.*
import java.util.concurrent.Executors

object CoroutineHelper {
    //自定义协程异常处理器
    private val handler = CoroutineExceptionHandler { _, exception ->
        Log.e("Error", "Exception===>"+exception.message)
    }

    //自定义协程作用域
    //Dispatchers协程调度器，IO代表在子线程中开启协程，MAIN代表在主线程中开启协程，DEFAULT代表在业务调用的线程中开启协程，Unconfined代表没有特殊指定哪个线程中开启协程
    val mViewModelScope = CoroutineScope(Dispatchers.Main + SupervisorJob() + handler)

    //自定义协程线程池，并转换成调度器
    val mDispatcher= Executors.newFixedThreadPool(16).asCoroutineDispatcher()//方案1

    //单线程的协程调度器
    val mSingleThreadDispatcher= newSingleThreadContext("SingleThreadDispatcher")//方案2

    //固定大小协程调度器
    val mFixedThreadDispatcher= newFixedThreadPoolContext(32,"FixedThreadDispatcher")//方案3

}